package com.stone.inventory.sharding.id;

/**
 * 分片id注入者
 *
 * @author Mr_wenpan@163.com 2021-07-28
 */

public interface ShardingIdInjector<T, I> {

    /**
     * 返回分片字段的值
     *
     * @param injectionObject 需要注入id的实体对象
     * @return 分片字段的值
     */
    T getShardingData(I injectionObject);

    /**
     * 注入操作
     *
     * @param injectionObject 需要注入id的实体对象
     * @param id              分片策略生成的分片id
     */
    void injection(I injectionObject, Long id);

    /**
     * 返回分片的逻辑表名称
     *
     * @return 逻辑表名称
     */
    String logicTableName();
}
